一、基本操作题(共四小题,第1和2题是7分、第3和4题是8分)
在考生目录下完成如下操作:
1. 打开"订货管理"数据库,并将表order_detail添加到该数据库中。
2. 为表order_detail的"单价"字段定义默认值为NULL。
3. 为表order_detail的"单价"字段定义约束规则:单价 > 0 ,违背规则时的提示信息是:"单价必须大于零"。
4. 关闭"订货管理"数据库,然后建立自由表customer,表结构如下:
客户号 字符型(6)
客户名 字符型(16)
地址 字符型(20)
电话 字符型(14)
解答:
1.使用菜单方法,也可以直接使用命令:
open database 订货管理
add table order_detail
2.order_detail表的单价设置空值:首先打开表设计器,选择“单价”字段,在NULL列选中(出现√),在默认值框中输入.null.(如下图)。

3.设置有效性规则:打开表设计器,选择需设置的字段,在“字段有效性”组框中设置(如上图),在“规则”框中输入约束条件,在“信息”框中输入提示信息(注意提示信息必须用定界符括起来)。
4.新建自由表时,可先使用命令CLOSE ALL DATABASE关闭数据库,再用菜单或命令的方法建立,可参考前几套试题,此处略。
二、简单应用(2小题,每题20分,计40分)
在考生目录下完成如下简单应用:
1. 列出总金额大于所有订购单总金额平均值的订购单(order_list)清单按客户号升序排列),并将结果存储到results表中(表结构与order_list表结构相同)。
解答:
本题用查询设计器不太有效(借助多次查询也是也可以),比较有效的办法是使用SQL语句,命令如下:
SELECT * FROM order_list WHERE 总金额>(SELECT AVG(总金额) FROM order_list ) ORDER BY Order_list.客户号 INTO TABLE results.dbf
也可以使用一般的命令:
USE order_list
AVERAGE 总金额 TO ABC
Sort on 客户号 to results FOR总金额 > ABC
2. 利用Visual Foxpro的"快速报表"功能建立一个满足如下要求的简单报表:
(1) 报表的内容是order_detail表的记录(全部记录,横向);
(2) 增加"标题带区",然后在该带区中放置一个标签控件,该标签控件显示报表的标题"器件清单";
(3) 将页注脚区默认显示的当前日期改为显示当前的时间;
(4) 最后将建立的报表保存为report1.frx。

解答:
方法1:利用快速报表建立报表:单击“文件”菜单下“新建”命令,在打开的“新建”对话框中选定“报表”,单击“新建文件”按钮,输入报表文件名,进入到“报表设计器”,再从“报表”菜单中单击“快速报表”命令,选择表“order_detail”,进入快速报表对话框(如上图),按要求选择字段、标题、横向等,最后在页注脚带区添加一个域控件,显示系统时间(使用time()函数)。
方法2:用向导的方式新建。新建好后,改标题名为“器件清单”,将页标题中当前系统日期移到页注脚,并双击该控件,将显示内容改为系统时间time()。
三、综合应用(1小题,计30分)
首先将order_detail表全部内容复制到od_bak表,然后对od_bak表编写完成如下功能的程序:
1. 把"订单号"尾部字母相同并且订货相同("器件号"相同)的订单合并为一张订单,新的"订单号"就取原来的尾部字母, "单价"取最低价,"数量"取合计;
2. 结果先按新的"订单号"升序排序,再按"器件号"升序排序;
3. 最终记录的处理结果保存在od_new表中;
4. 最后将程序保存为prog1.prg,并执行该程序。
解答:程序Prog1.prg中的代码如下:
Use order_detail
Copy to od_bak
Use od_bak
index on right(订单号,1)+器件号+str(单价) tag kk
total on right(订单号,1)+器件号 to od_new1 fields 数量
use od_new1
replace all 订单号 with right(订单号,1)
copy to od_new